﻿using System;
using System.Web.UI;
using StockholmsStad.Web.UI.Class.Controller;
using StockholmsStad.Web.UI.Class.Facade;
using StockholmsStad.Web.UI.Class.Model;
using StockholmsStad.Web.UI.Class.Utilities;

namespace StockholmsStad.Web.UI.VaraUppgifter
{
    /// <summary>
    /// Webbsida för att se och ändra våra uppgifter, dvs det som matades in vid registrering
    /// </summary>
    public partial class VaraUppgifter : Page
    {
        private OurRegistrationController _controller;

        /// <summary>
        /// Körs när sidan laddas
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            var session = new HttpSessionAdapter(Session);
            var facade = new WebServiceFacade();
            var registrationModel = new RegistrationModel(session, facade);
            _controller = new OurRegistrationController(registrationModel,
                                                        new LoginModel(session, facade, new HttpContextAdapter(Context)),
                                                        registrationSummary, registrationPersons, registrationContact);
            registrationContact.Controller = _controller;
            btnChange.Enabled = registrationModel.IsUpdateable();
            
            if (!Page.IsPostBack)
            {
                _controller.PageLoad();
            }
            else
            {
                DisplayStepControl();
            }
        }

        /// <summary>
        /// Knapptryck på 'ändra' vid då användaren ser sammanfattningen av våra uppgifter
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnChange_Click(object sender, EventArgs e)
        {
            _controller.UpdateChangablePages();
            MultiView1.SetActiveView(View2);
            DisplayStepControl();
        }
        /// <summary>
        /// Displays the step control according to active view
        /// </summary>
        private void DisplayStepControl()
        {
            const string PERSON_INFO_STEP_TEXT = "Personuppgifter";
            const string CONTACT_INFO_STEP_TEXT = "Kontaktuppgifter";

            switch (MultiView1.ActiveViewIndex)
            {
                case 1:
                    StepControlView2.Clear();
                    StepControlView2.AddStep(PERSON_INFO_STEP_TEXT, true, false);
                    StepControlView2.AddStep(CONTACT_INFO_STEP_TEXT, false, false);
                    StepControlView2.Refresh();
                    break;
                case 2:
                    StepControlView3.Clear();
                    StepControlView3.AddStep(PERSON_INFO_STEP_TEXT, false, true);
                    StepControlView3.AddStep(CONTACT_INFO_STEP_TEXT, true, false);
                    StepControlView3.Refresh();
                    break;
            }
        }

        /// <summary>
        /// Knapptryck på 'avbryt' då användaren håller på att ändra på person1 och person2
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnCancelPersonUpdate_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/VaraUppgifter/VaraUppgifter.aspx");
        }

        /// <summary>
        /// Knapptryck på 'Fortsätt' då användaren håller på att ändra på person1 och person2
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnSubmitPersonUpdate_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                _controller.RegisterPersons(registrationPersons.Person1, registrationPersons.Person2);
                MultiView1.SetActiveView(View3);
                DisplayStepControl();
            }
        }

        /// <summary>
        /// Knapptryck på 'avbryt' då användaren håller på att ändra på kontaktperson och ceremoniinformation
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnCancelContactUpdate_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/VaraUppgifter/VaraUppgifter.aspx");
        }

        /// <summary>
        /// Knapptryck på 'spara' då användaren håller på att ändra på kontaktperson och ceremoniinformation.
        /// Sparar av hela förändringen till server.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnSubmitUpdate_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                _controller.RegisterContact(registrationContact.Contact, registrationContact.CeremonyInformation,
                                            registrationContact.ContactPersonListIsFirstPerson());
                _controller.SubmitRegistrationUpdate(registrationContact.Contact);
                Response.Redirect("~/VaraUppgifter/VaraUppgifter.aspx");
            }
        }
    }
}